<?php

/**
 * This is the model class for table "{{resultado}}".
 *
 * The followings are the available columns in table '{{resultado}}':
 * @property integer $id_resultado
 * @property integer $id_usuario
 * @property integer $id_questionario
 * @property string $data_resultado
 * @property integer $num_funcionario
 * @property double $faturamento_empresa
 *
 * The followings are the available model relations:
 * @property Resposta[] $respostas
 * @property Questionario $idQuestionario
 * @property Usuario $idUsuario
 * @property Eixo[] $tbEixos
 */
class Resultado extends CActiveRecord
{
	/**
	 * Returns the static model of the specified AR class.
	 * @param string $className active record class name.
	 * @return Resultado the static model class
	 */
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}

	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return '{{resultado}}';
	}

	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
			array('id_usuario, id_questionario, data_resultado, num_funcionario, faturamento_empresa', 'required'),
			array('id_usuario, id_questionario, num_funcionario', 'numerical', 'integerOnly'=>true),
//			array('faturamento_empresa', 'numerical'),
			// The following rule is used by search().
			// Please remove those attributes that should not be searched.
			array('id_resultado, id_usuario, id_questionario, data_resultado, num_funcionario, faturamento_empresa', 'safe', 'on'=>'search'),
		);
	}

	/**
	 * @return array relational rules.
	 */
	public function relations()
	{
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
			'respostas' => array(self::HAS_MANY, 'Resposta', 'id_resultado'),
			'questionario' => array(self::BELONGS_TO, 'Questionario', 'id_questionario'),
			'usuario' => array(self::BELONGS_TO, 'Usuario', 'id_usuario'),
			'eixos' => array(self::MANY_MANY, 'Eixo', '{{resultado_eixo}}(id_resultado, id_eixo)'),
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
			'id_resultado' => 'ID Resultado',
			'id_usuario' => 'ID Usuario',
			'id_questionario' => 'ID Questionario',
			'data_resultado' => 'Data do Resultado',
			'num_funcionario' => 'Número de Funcionários',
			'faturamento_empresa' => 'Faturamento da Empresa',
		);
	}

	/**
	 * Retrieves a list of models based on the current search/filter conditions.
	 * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.
	 */
	public function search()
	{
		// Warning: Please modify the following code to remove attributes that
		// should not be searched.

		$criteria=new CDbCriteria;

		$criteria->compare('id_resultado',$this->id_resultado);
		$criteria->compare('id_usuario',$this->id_usuario);
		$criteria->compare('id_questionario',$this->id_questionario);
		$criteria->compare('data_resultado',$this->data_resultado,true);
		$criteria->compare('num_funcionario',$this->num_funcionario);
		$criteria->compare('faturamento_empresa',$this->faturamento_empresa);

		return new CActiveDataProvider($this, array(
			'criteria'=>$criteria,
		));
	}
        
        protected function calcMax()
        {
            $eixosQuestionario = QuestionarioEixo::model()->findAll('id_questionario = :id_questionario',array(':id_questionario'=>$this->id_questionario));
            $questoes = Questao::model()->with('maxFM')->findAll('id_questionario = :id_questionario',array(':id_questionario'=>$this->id_questionario));
            
            foreach($eixosQuestionario as $i=>$eixoQuestionario)
            {
                $resultado[$i] = 0;
            }
            
            foreach($questoes as $questao)
            {
                $maxFM = $questao->maxFM;
                $eixosQuestao = EixoQuestao::model()->findAll('id_questao = :id_questao',array(':id_questao'=>$questao->id_questao));
                
                foreach($eixosQuestao as $i=>$eixoQuestao)
                {
                    $resultado[$i] += $maxFM * $eixoQuestao->peso;
                }
            }
            
            return $resultado;
        }
        
        protected function calcMin()
        {
            $eixosQuestionario = QuestionarioEixo::model()->findAll('id_questionario = :id_questionario',array(':id_questionario'=>$this->id_questionario));
            $questoes = Questao::model()->with('minFM')->findAll('id_questionario = :id_questionario',array(':id_questionario'=>$this->id_questionario));
            
            foreach($eixosQuestionario as $i=>$eixoQuestionario)
            {
                $resultado[$i] = 0;
            }
            
            foreach($questoes as $questao)
            {
                $minFM = $questao->minFM;
                $eixosQuestao = EixoQuestao::model()->findAll('id_questao = :id_questao',array(':id_questao'=>$questao->id_questao));
                
                foreach($eixosQuestao as $i=>$eixoQuestao)
                {
                    $resultado[$i] += $minFM * $eixoQuestao->peso;
                }
            }
            
            return $resultado;            
        }
        
        public function calcResultado()
        {
            $eixosQuestionario = QuestionarioEixo::model()->findAll('id_questionario = :id_questionario',array(':id_questionario'=>$this->id_questionario));
            $respostas = Resposta::model()->with('alternativa')->findAll('id_resultado = :id_resultado',array(':id_resultado'=>$this->id_resultado));
            
            foreach($eixosQuestionario as $i=>$eixoQuestionario)
            {
                $resultado[$i] = 0;
            }
            
            foreach($respostas as $resposta)
            {
                $fatorMultiplicativo = $resposta->alternativa->fator_multiplicativo;
                $eixosQuestao = EixoQuestao::model()->findAll('id_questao = :id_questao',array(':id_questao'=>$resposta->id_questao));
                
                foreach($eixosQuestao as $i=>$eixoQuestao)
                {
                    $resultado[$i] += $fatorMultiplicativo * $eixoQuestao->peso;
                }
            }
            
            
            $maximo = $this->calcMax();
            $minimo = $this->calcMin();
                                
            for($x = 0; $x < count($maximo); $x++)
            {
                $ftAjuste[$x] = 0 - $minimo[$x];
                $fxPontuacao[$x] = $maximo[$x] - $minimo[$x];
                
                if ($fxPontuacao[$x] != 0) 
                    $txAtendimento[$x] = (($resultado[$x] + $ftAjuste[$x]) / $fxPontuacao[$x]) * 100;
                else
                    $txAtendimento[$x] = 0;    
                
                $txAtendimento[$x] = number_format($txAtendimento[$x],2);
            }
            
            return $txAtendimento;
        }
        
        public function beforeSave() 
        {
            $this->faturamento_empresa = str_replace(',', '.', $this->faturamento_empresa);
            
            return parent::beforeSave();
        }
}
